package com.horizon.common.util;


import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * 文件操作工具类
 *
 * @author wangfuwei
 * @version 2018-08-04
 */
public class FileUtil {

    /**
     * 获取目录下的文件
     *
     * @param path
     * @return
     */
    public static List<File> getFile(String path) {
        List<File> fileList = new ArrayList<>();
        getFiles(path, fileList, false);
        return fileList;
    }


    /**
     * 获取目录下的所有文件
     *
     * @param path 文件路径
     * @return
     */
    public static List<File> getAllFile(String path) {
        List<File> fileList = new ArrayList<>();
        getFiles(path, fileList, true);
        return fileList;
    }

    private static void getFiles(String filePath, List<File> fileList, Boolean deep) {
        File root = new File(filePath);
        File[] files = root.listFiles();
        if (files != null) {
            for (File file : files) {
                if (deep) {
                    if (file.isDirectory()) {
                        getFiles(file.getAbsolutePath(), fileList, deep);
                    } else {
                        fileList.add(file);
                    }
                } else {
                    fileList.add(file);
                }
            }
        }
    }

    /**
     * 删除文件夹及其下属文件
     *
     * @param folderPath
     */
    public static boolean delAllFolder(String folderPath) {
        delAllFile(folderPath);
        File file = new File(folderPath);
        return file.delete();
    }

    /**
     * 删除文件夹下所有文件及文件夹
     *
     * @param filePath
     * @return
     */
    public static boolean delAllFile(String filePath) {
        boolean flag = false;
        // new File
        File file = new File(filePath);
        // 文件不存在
        if (!file.exists()) {
            return false;
        }
        // 如果只是一个文件直接删除
        if (file.isFile() && file.delete()) {
            return true;
        }
        // 如果filePath ，没有以 "/" 结尾 自动加上
        if (!filePath.endsWith("/")) {
            filePath = filePath + "/";
        }
        // 文件夹下的文件列表
        String tempList[] = file.list();
        File temp;
        // 遍历文件列表
        for (String f : tempList) {
            // 接受文件
            temp = new File(filePath + f);
            // 如果是文件 递归调用
            if (temp.isDirectory()) {
                delAllFile(filePath + f);
                delAllFolder(filePath + f);
                flag = true;
            } else if (temp.isFile() && temp.delete()) {
                // 如果是文件
                flag = true;
            }
        }
        return flag;
    }
}